package com.ming.learn.from.carl.binary.tree;

import com.ming.commons.utils.TreeNode;
import com.sun.jmx.remote.internal.ArrayQueue;

import java.util.ArrayList;
import java.util.List;

public class Of20210305LeetCode199 {
    /*
    给定一棵二叉树，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。
     */
    public static void main(String[] args) {
        System.out.println(rightSideView(new TreeNode(1, new TreeNode(2, new TreeNode(4)
                , new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)))));
    }

    /*
    层序遍历的时候，判断是否遍历到单层的最后面的元素，如果是，就放进result数组中，随后返回result就可以了。
     */
    private static List<Integer> rightSideView(TreeNode root) {
        ArrayQueue<TreeNode> que = new ArrayQueue<>(10);
        ArrayList<Integer> result = new ArrayList<>();
        if (root != null) que.add(root);
        while (!que.isEmpty()) {
            int size = que.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = que.remove(0);
                if (i == size - 1) result.add(node.val);
                if (node.left!=null) que.add(node.left);
                if (node.right!=null) que.add(node.right);
            }
        }
        return result;
    }
}
